package edu.uoc.vmerinom.tfc.backup;

import java.text.SimpleDateFormat;
import java.util.List;

import javax.persistence.EntityManager;

import edu.uoc.vmerinom.tfc.domain.Solicitud;

public class Solicitudes {
	@SuppressWarnings("unchecked")
	public static String backup(EntityManager entityManager) {
		StringBuffer backup = new StringBuffer();
		List<Solicitud> solicitudes = entityManager.createQuery("from Solicitud order by id").getResultList();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		for (Solicitud solicitud : solicitudes) {
			StringBuffer insert = new StringBuffer();
			insert.append("insert into solicitudes (creado, modificado, nombre, primer_apellido, segundo_apellido, movil, fijo, email, ");
			insert.append("nombre_grupo, aceptada, comentarios, referencia, fecha_entrada, resolucion, fecha_resolucion) values (");
			insert.append("current_timestamp, current_timestamp, '");
			insert.append(solicitud.getNombre());
			insert.append("', '");
			insert.append(solicitud.getPrimerApellido());
			insert.append("', ");
			if (solicitud.getSegundoApellido() != null) {
				insert.append("'");
				insert.append(solicitud.getSegundoApellido());
				insert.append("', ");
			} else {
				insert.append("null, ");
			}
			if (solicitud.getMovil() != null) {
				insert.append("'");
				insert.append(solicitud.getMovil());
				insert.append("', ");
			} else {
				insert.append("null, ");
			}
			if (solicitud.getFijo() != null) {
				insert.append("'");
				insert.append(solicitud.getFijo());
				insert.append("', ");
			} else {
				insert.append("null, ");
			}
			insert.append("'");
			insert.append(solicitud.getEmail());
			insert.append("', ");
			if (solicitud.getNombreGrupo() != null) {
				insert.append("'");
				insert.append(solicitud.getNombreGrupo());
				insert.append("', ");
			} else {
				insert.append("null, ");
			}
			if (solicitud.getAceptada() != null) {
				insert.append(solicitud.getAceptada());
				insert.append(", ");
			} else {
				insert.append("null, ");
			}
			if (solicitud.getComentarios() != null) {
				insert.append("'");
				insert.append(prepare(solicitud.getComentarios()));
				insert.append("', ");
			} else {
				insert.append("null, ");
			}
			if (solicitud.getReferencia() != null) {
				insert.append("'");
				insert.append(solicitud.getReferencia());
				insert.append("', ");
			} else {
				insert.append("null, ");
			}
			if (solicitud.getFechaEntrada() != null) {
				insert.append("'");
				insert.append(sdf.format(solicitud.getFechaEntrada()));
				insert.append("', ");
			} else {
				insert.append("null, ");
			}
			if (solicitud.getResolucion() != null) {
				insert.append("'");
				insert.append(prepare(solicitud.getResolucion()));
				insert.append("', ");
			} else {
				insert.append("null, ");
			}
			if (solicitud.getFechaResolucion() != null) {
				insert.append("'");
				insert.append(sdf.format(solicitud.getFechaResolucion()));
				insert.append("'");
			} else {
				insert.append("null");
			}
			insert.append(");\n");
			backup.append(insert);
		}
		return backup.toString();
	}
	
	private static String prepare(String string) {
		StringBuffer changed = new StringBuffer();
		char[] array = string.toCharArray();
		for (char c : array) {
			if (c == '\n') {
				changed.append("\\n");
			} else {
				changed.append(c);
			}
		}
		return changed.toString();
	}
}
